package ui;

import factory.BeanFactory;
import service.IUserService;
import service.impl.UserServiceImpl;

/**
* 模拟客户端访问
*/
public class TestClient {

   public static void main(String[] args) {
       //实例化service
//       IUserService userService = new UserServiceImpl();
       /**
        * 书接上一篇 此时我们的工厂还有问题，比如说 我们在多次对象实例化的时候就会出现问题
        */
       for (int i = 0; i < 5; i++) {
           IUserService userService = (IUserService)BeanFactory.getBean("userService");
           System.out.println("第" + i + "次实例化: " + userService);
       }
       /**
        * 查看打印结果为：
        * 第0次实例化: service.impl.UserServiceImpl@677327b6
        * 第1次实例化: service.impl.UserServiceImpl@14ae5a5
        * 第2次实例化: service.impl.UserServiceImpl@7f31245a
        * 第3次实例化: service.impl.UserServiceImpl@6d6f6e28
        * 第4次实例化: service.impl.UserServiceImpl@135fbaa4
        * 我们发现对象被实例化多次  也就是我们通常所说的多例
        * 由于每次使用多项，都要重新实例化 所以这就带来了效率问题
        *
        * 所以为了提高执行效率 所以我们要将对象的实例化改为单例
        * 如何改为单例呢？ 我们可以想到就是将实例化好的对象存储起来，
        * 等到我们下次再用的时候再取出来就可以了
        * 所以这里我们可以创造一个容器Map 用它来存储我们要使用是对象
        * 那么对象的实例化的时机就有两种
        *   1.当工厂类加载到内存中的时候 直接实例化(饿汉)
        *   2.当我们第一次使用对象的时候再进行实例化，后续再次使用的时候不再进行实例化（懒汉）
        */
       IUserService userService = (IUserService)BeanFactory.getBean("userService");
//       userService.saveUser();
  }
}